home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 48
/
Amiga Format CD48 (1999-12-13)(Future Publishing)(GB)(Track 1 of 2)[!][issue 2000-01].iso
/
-in_the_mag-
/
networking
/
crosspc
/
parpc04
/
packet
/
src
/
timeout.asm
< prev
next >
Wrap
Assembly Source File
|
1993-04-01
|
984b
|
35 lines
;put into the public domain by Russell Nelson, nelson@crynwr.com
;we read the timer chip's counter zero. It runs freely, counting down
;from 65535 to zero. Whenever the count is above the old count, the
;timer must have wrapped around. When that happens, we count down a tick.
timeout dw ? ;number of ticks to wait.
timeout_counter dw ? ;old counter zero value.
set_timeout:
;enter with ax = number of ticks (36.4 ticks per second).
inc ax ;the first times out immediately.
mov cs:timeout,ax
mov cs:timeout_counter,0
ret
do_timeout:
;call periodically when checking for timeout. Returns nz if we haven't
;timed out yet.
mov al,0 ;latch counter zero.
out 43h,al
in al,40h ;read counter zero.
mov ah,al
in al,40h
xchg ah,al
cmp ax,cs:timeout_counter ;is the count higher?
mov cs:timeout_counter,ax
jbe do_timeout_1 ;no.
dec cs:timeout ;Did we hit the timeout value yet?
ret
do_timeout_1:
or sp,sp ;ensure nz.
ret